; (function () {
    //return
    //俩个类A和B, 如果可以描述 A是B 或者B是A,那就是继承关系
    // 如果B是A,
    // 则:
    // B继承自A
    // A派生B
    // B是A的子类
    // A是B的父类

    // 如果A是B的父类,则B会自动拥有A中的所有实例成员

    // 新的关键字 extends
    // super 
    // 1. 直接当做函数调用 标识父类构造函数

    // 注意es6要求, 如果定义了constructor, 并且该类是子类
    // 则必须在constructor的第一行手动调用父类的构造

    // 如果子类不写构造函数,则会有默认的构造器, 该构造器和父类一致,自动调用
    
    // 2. 如果当做对象的时候调用, 为父类的prototype

    class Animal {
        constructor(type, name, age, sex) {
            this.type = type;
            this.name = name;
            this.age = age;
            this.sex = sex;
        }
        // 这里就是原型方法
        print() {
            console.log(`[种类]:${this.type}`);
            console.log(`[名字]:${this.name}`);
            console.log(`[年龄]:${this.age}`);
            console.log(`[性别]:${this.sex}`);
        }
        
    }

    class Dog extends Animal{
        constructor(name,age,sex){
            super('犬类',name,age,sex)
            this.loves = '吃骨头'
        }
        jiao(){
            console.log('汪汪!!!',this.loves);
        }
        print(){
            // 调用父类的print
            super.print()
            console.log('[爱好]:'+ this.loves)
            // 在调用自己特有的print
        }
    }

    const dog = new Dog( "旺财", -100, "男")
    dog.print()

})();